package com.desay.pangoo.itmt.enums;

import java.util.EnumSet;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.desay.pangoo.common.lite.lang.web.IResponseEnum;
import com.desay.pangoo.itmt.config.MessageSourceHandler;

import lombok.Setter;

/**
 * 异常提示国际化配置
 * 
 * @author huangshouyi
 *
 */
public enum ExceptionCodeEnum implements IResponseEnum {

	/** 工作组名称已经存在 */
	WORK_GROUP_EXIST(10001, "work_group_exist"),
	/** 工作组名称编号存在 */
	WORK_GROUP_PTN_EXIST(10005, "work_group_ptn_exist"),
	/** 该工作组不存在 */
	WORK_GROUP_NOT_EXIST(10002, "work_group_not_exist"),
	/** 工作组ID不能为空 */
	WORK_GROUP_NOT_EMPTY(10003, "work_group_not_empty"),
	/** 工作组有关联的数据，不能删除 */
	WORK_GROUP_EXIST_RELATION(10004, "work_group_exist_relation"),
	/** 该Road Map不存在 */
	PARENT_ROAD_MAP_NOT_EXIST(20001, "parent_road_map_not_exist"),
	/** Name of Phases or Subsidiaries (Must have PTN) */
	ROAD_MAP_PTN_NOT_EXIST(20002, "road_map_ptn_not_exist"),
	/** Road Map不存在 */
	ROAD_MAP_NOT_EXIST(20003, "road_map_not_exist"),
	/** Road Map Children存在，不能直接删除 */
	ROAD_MAP_CHILDREN_EXIST(20004, "road_map_children_exist"),
	/** 技术编号已经存在 */
	ROAD_MAP_TECHPTN_EXIST(20005, "road_map_techptn_exist"),
	/** 该Road Map不存在 */
	PARENT_ROAD_MAP_NOT_EMPTY(20006, "parent_road_map_not_empty"),
	/** 技术名称或者技术编号已经存在 */
	PARENT_ROAD_MAP_NAME_OR_PTN_EXIST(20007, "road_map_name_or_ptn_exist"),
	/** 技术分类信息已经存在 */
	TECH_CLASSIFICATION_EXIST(30001, "tech_classification_exist"),
	/** 技术分类信息不存在 */
	TECH_CLASSIFICATION_NOT_EXIST(30002, "tech_classification_not_exist"),
	/** 技术分类信息不能为空 */
	TECH_CLASSIFICATION_NOT_EMPTY(30003, "tech_classification_not_empty"),
	/** 技术分类包含技术项目信息，不能直接删除 */
	TECH_CLASSIFICATION_CHILDREN_EXIST(30004, "tech_classification_children_exist"),
	/** 技术所在的工作组不存在,或工作组名称错误 */
	TECH_PROJECT_INFO_GROUP_NOT_EXIST(40001, "tech_project_info_group_not_exist"),
	/** 技术名称或者子技术已经存在 */
	TECH_PROJECT_INFO_EXIST(40002, "tech_project_info_exist"),
	/** 技术名称或者子技术不存在 */
	TECH_PROJECT_INFO_NOT_EXIST(40003, "tech_project_info_not_exist"),
	/** 已经存在变更申请未完成，待审核完成 */
	TECH_PROJECT_INFO_CHANGE_EXIST(40004, "tech_project_info_change_exist"),
	/** 上传文件异常 */
	UPLOAD_FILE_ERROR(50001, "upload_file_error"),
	/** UPLOAD_FILE_NOT_EXIST */
	UPLOAD_FILE_NOT_EXIST(50002, "upload_file_not_exist"),
	/** 提案申请课题名称已经存在 */
	TECH_ONLINE_REVIEW_INFO_EXIST(60001, "tech_online_review_exist"),
	/** 提案申请课题不存在 */
	TECH_ONLINE_REVIEW_NOT_EXIST(60002, "tech_online_review_not_exist"),
	/** 提案申请关联性反馈 */
	TECH_ONLINE_REVIEW_ALREADY_RELEVANT(60003, "tech_online_review_already_relevant"),
	/** 您暂无评审权限，请等待ITMT审核 */
	TECH_ONLINE_TMT_REVIEW_NOT_EXIST(60004, "tech_online_tmt_review_not_exist"),
	/** 不是ITMT成员审核成员，不能反馈 */
	TECH_ONLINE_NOT_ITMT(60005, "tech_online_not_itmt"),
	/** 您已经提交反馈，不能重复提交 */
	TECH_ONLINE_ITMT_REVIEW_EXIST(60006, "tech_online_itmt_review_exist"),
	/** TMT成员已经存在，不能重复添加 */
	TECH_ONLINE_ITMT_REVIEWER_EXIST(60007, "tech_online_itmt_reviewer_exist"),
	/** ITMT相关性反馈到期 */
	TECH_ONLINE_ITMT_OVER_DUE_DATE(60008, "tech_online_itmt_over_due_date"),
	/** 未参会评委显示“未参会”，失去表决权 */
	TECH_ONLINE_ITMT_NOT_ATTEND(60009, "tech_online_itmt_not_attend"),
	/** TMT 评审未开始，不能评审 */
	TECH_ONLINE_ITMT_REVIEW_IS_NOT_BEGIN(60010, "tech_online_itmt_review_is_not_begin"),
	/** 流程结束期限:关闭评审通道 */
	TECH_ONLINE_ITMT_REVIEW_IS_END(60011, "tech_online_itmt_review_is_end"),
	/** 评审已经开始不能添加或者删除评委信息 */
	TECH_ONLINE_ITMT_REVIEW_ATTEND_END(60012, "tech_online_itmt_review_attend_end"),
	/** 不是PLITMT成员审核成员，不能反馈 */
	TECH_ONLINE_NOT_PLITMT(600014, "tech_online_not_plitmt"),
	/** 评审结果不能为空 */
	TECH_ONLINE_ITMT_REVIEW_RESULT_CATNOT_EMPTY(60013, "tech_online_itmt_review_result_catnot_empty"),
	/** crossbreed 技术认定不能为空 */
	TECH_ONLINE_ITMT_REVIEW_RESULT_CROSSBREED_CATNOT_EMPTY(60013,
			"tech_online_itmt_review_result_crossbreed_catnot_empty"),
	/** 组织架构人员包含下级信息，不能删除 */
	ORG_CHART_HAS_CHILDREN(70001, "org_chart_has_children"),
	/** 组织架构人员信息不存在 */
	ORG_CHART_NOT_EXIST(70002, "org_chart_not_exist"),
	/** 当前角色信息已经存在，不能重复添加 */
	ORG_CHART_HAS_EXIST(70003, "org_chart_has_exist"),
	/** 用户头像不存在 */
	ORG_CHART_USER_AVATAR_NOT_EXIST(70004, "org_chart_user_avatar_not_exist"),
	/** The technical definition book cannot be empty */
	TECHNICAL_DEFINITION_CANNOT_BE_EMPTY(80001, "technical_definition_cannot_be_empty"),
	/** 当前BU信息已经存在，不能重复添加 */
	BU_HAS_EXIST(110001, "bu_has_exist"),
	/** BU信息不存在 */
	BU_NOT_EXIST(110002, "bu_not_exist"),
	/** BU已经被使用，不能删除 */
	BU_HAS_USED(110003, "bu_has_used"),
	/** 项目平台BU信息不存在 */
	PROJECT_BU_NOT_EXIST(120001, "project_bu_not_exist"),
	/** 项目平台BU信息已经不存在 */
	PROJECT_BU_HAS_EXIST(120002, "project_bu_has_exist"),
	/** 产品平台已经使用 */
	PROJECT_HAS_USED(120003, "project_has_used"),
	/** 数据版本不一致，请刷新页面重试 */
	DATA_VERSION_ERROR(90002, "data_version_error"),
	/** 未知错误 */
	UNKOWN_ERROR(90001, "unkown_error"),
	/** 网络异常，请联系系统管理员 */
	NETWORK_ERROR(90002, "network_error"),


	/*--------------------- RAG AI问答异常状态码---------------------*/
	/** 用户不存在 */
	RAG_USER_NOT_EXIST(110401,"user_not_exist"),
	/** 聊天会话不存在 */
	RAG_CHAT_NOT_EXIST(110404,"chat_not_exist"),
	/** AI回答服务异常 */
	RAG_CHAT_SERVICE_ERROR(110500,"chat_service_error"),
	/** 消息不存在 */
	RAG_MESSAGE_NOT_EXIST(101401,"message_not_exist"),
	/** 消息不是Ai生成的消息 */
	RAG_MESSAGE_NOT_AI(101402,"message_not_ai"),
    /** 缺少Ai服务的相关配置 */
	RAG_CHAT_SERVICE_MISS_CONFIG(110501,"chat_service_miss_config"),
	/** Ai服务初始化失败 */
	RAG_CHAT_SERVICE_INIT_FAIL(110502,"chat_service_init_fail"),
	/** Ai问答模块，统一的参数异常状态码 */
	RAG_PARAMS_ERROR(110400,"rag_params_error"),
	RAG_MESSAGE_NOT_DELETE(110401,"rag_message_not_delete"),
	/** Ai元数据解析失败 */
	RAG_METADATA_PARSE_ERROR(110402,"rag_metadata_parse_error"),
	/** 用户消息无法回答 */
	RAG_USER_MESSAGE_ERROR(110403,"rag_user_message_error"),
	DATE_FORMAT_ERROR(110404,"date_format_error"),
	MEMBER_NOT_EXIST(110404,"member_not_exist"),
	/**
	 * 提案贡献度已经被计算
	 */
	REVIEW_HAS_CALCULATION(110405,"review_has_calculation"),
	REQUEST_PARAMS_ERROR(110406,"request_params_error")
		;

	private Integer code;

	private String message;

	ExceptionCodeEnum(Integer code, String message) {
		this.code = code;
		this.message = message;
	}

	@Override
	public Integer getCode() {
		return this.code;
	}

	@Override
	public String toString() {
		return this.name();
	}

	@Setter
	private MessageSourceHandler messageSourceHandler;

	@Override
	public String getMessage() {
		return messageSourceHandler.getMessage(message);
	}

	/**
	 * 通过静态内部类的方式注入bean，并赋值到枚举中
	 */
	@Component
	public static class ReportTypeServiceInjector {
		// 引入国际化处理类
		@Resource
		private MessageSourceHandler messageSourceHandler;

		@PostConstruct
		public void postConstruct() {
			for (ExceptionCodeEnum resp : EnumSet.allOf(ExceptionCodeEnum.class)) {
				resp.setMessageSourceHandler(messageSourceHandler);
			}
		}
	}

}
